'''
Description: 
Author: Zilu
Date: 2021-11-12 12:11:32
Version: 
LastEditTime: 2021-11-12 13:10:08
LastEditors: Zilu
'''

# Base64 是一种用64个字符来表示任意二进制数据的方法
# Base64 把3字节编码为4单位（每单位6位）长的数据，长度增加 33%
# 不足3字节的补上 0x00 ，并在末尾使用1个或2个=号，表示补了多少字节，解码的时候自动去掉
import base64
base64.b64encode(b'binary\x00string')
base64.b64decode(b'YmluYXJ5AHN0cmluZw==')

# 由于标准的Base64编码后可能出现字符+和/，在URL中就不能直接作为参数，
# 所以又有一种"url safe"的base64编码，其实就是把字符+和/分别变成-和_
base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')
base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')

# 很多Base64编码将==去掉，防止在URL、Cookie中造成歧义

# Base64是一种任意二进制到文本字符串的编码方法，
# 常用于在URL、Cookie、网页中传输少量二进制数据。

# 练习：写一个能解码去掉=的base64数据的函数
def safeBase64Decode(s):
    return base64.b64decode(next(s + x for x in ['', '=', '=='] if (len(s) + len(x)) % 4 == 0))
    

